#include<iostream>
#include<sstream>
#include<string>
#include<memory>
#include<jsoncpp/json/json.h>

//序列化代码
int main()
{
    const char* name = "小明";
    int age = 18;
    float scores[] = { 77.5,89,93.6};
    Json::Value root;
    root["名字"] = name;
    root["年龄"] = age;
    for(int i=0; i<sizeof(scores)/sizeof(int); i++)
    {
        root["成绩"].append(scores[i]);
    }

    Json::StreamWriterBuilder swb;
    std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
    std::stringstream ss;
    sw->write(root,&ss);
    std::cout << ss.str() << std::endl;
    return 0;
}

//反序列化代码
int main()
{
    std::string str = " {\"姓名\":\"小黑\",\"年龄\":19,\"成绩\":[58.8,56.59]}";
    Json::Value root;
    Json::CharReaderBuilder crb;
    std::unique_ptr<Json::CharReader> cr(crb.newCharReader()); //调用指针指针是为了不用调用自己手动释放
    std::string err;
    bool ret = cr->parse(str.c_str(),str.c_str() + str.size(),&root,&err);
    if(ret == false)
    {
        std::cout << "parse error:" << err << std::endl;
    }
    std::cout << root["姓名"].asString() << std::endl; //root["姓名"].asString() 用于获取键为 "姓名" 的值，并将其转换为字符串类型。
    root["年龄"].asInt();                               //root["年龄"].asInt() 用于获取键为 "年龄" 的值，并将其转换为整数类型。
    std::cout << root["年龄"].asInt() << std::endl;
    int sz = root["成绩"].size();
    for(int i=0; i<sz; i++)
    {
        std::cout << root["成绩"][i].asInt() << std::endl;
    }

    return 0;
}